package com.kai.JwtUtil;


import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.security.Keys;

import javax.crypto.SecretKey;
import java.nio.charset.StandardCharsets;
import java.util.Date;
import java.util.Map;

public class JwtUtil {

    /**
     * 创建jwt
     *
     * @param secretKey 密钥
     * @param ttlMillis jwt的过期时间
     * @param claims    jwt的参数
     * @return
     */
    public static String createJWT(String secretKey, long ttlMillis, Map<String, Object> claims) {
        // 新版本使用 Keys 来创建密钥
        SecretKey key = Keys.hmacShaKeyFor(secretKey.getBytes(StandardCharsets.UTF_8));

        //token过期时间
        long expMillis = System.currentTimeMillis() + ttlMillis;
        Date exp = new Date(expMillis);

        JwtBuilder builder = Jwts.builder()
                //设置Claims
                .claims(claims)  // 新版本方法名改为 claims() 而不是 setClaims()
                //过期时间
                .expiration(exp)
                //签名算法和密钥
                .signWith(key);

        return builder.compact();

    }

    public static Claims parseJWT( String secretKey,String token) {

        // 新版本使用 Keys 来创建密钥
        SecretKey key = Keys.hmacShaKeyFor(secretKey.getBytes(StandardCharsets.UTF_8));

        return Jwts.parser()
                //设置解密需要的密钥
                .verifyWith(key)
                .build()
                //需要解析的token
                .parseSignedClaims(token)  // 新版本方法名改为 parseSignedClaims
                .getPayload();  // 新版本方法名改为 getPayload
    }
    }
